home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor1 / rev.rpl < prev    next >
Text File  |  1990-10-18  |  2KB  |  68 lines

  1. %%HP: T(3)A(R)F(.);
  2. @
  3. @ REV, by ?
  4.  
  5. @ Slightly faster than the REVERSE command in Donnelly's Tool Library, but
  6. @ REV only reverses strings; REVERSE also reverses lists.
  7.  
  8. @ Reverse the characters in the stack level 1 string.  Based on the
  9. @ HP-71B REV$ (internal) routine.
  10.  
  11. \<<
  12.   "D9D20"    @ Begin            ; 02D9D
  13.   "E1632" +    @ \<<            ; 2361E
  14.   "78BF1" +    @   DUP            ; 1FB87
  15.   "64BC1" +    @   NUM            ; 1CB46
  16.   "8DBF1" +    @   DROP        ; 1FBD8
  17.   "CB2A1" +    @   NEWOB        ; 1A2BC
  18.   "CCD20" +    @   In-line code    ; 02DCC
  19.   "38000" +    @     Code length = 131    ; 00083
  20.   "137" +    @     CD1EX        ; Save D1 in R1...
  21.   "109" +    @     R1=C        ;   ...
  22.   "137" +    @     CD1EX        ;   ...
  23.   "AF9" +    @     C=B    W        ; Save B in R2...
  24.   "10A" +    @     R2=C        ;   ...
  25.   "147" +    @     C=DAT1 A        ; Put address of string object
  26.   "137" +    @     CD1EX        ;   in D1.
  27.   "174" +    @     D1=D1+ 5        ; Skip prolog
  28.   "143" +    @     A=DAT1 A        ; Copy length to A[A]
  29.   "174" +    @     D1=D1+ 5        ; Skip length
  30.   "133" +    @     AD1EX        ; Adjust length...
  31.   "1C4" +    @     D1=D1- 5        ;   ...
  32.   "133" +    @     AD1EX        ;   ...
  33.   "AF1" +    @     B=0    W        ; Convert length in nibbles to
  34.   "D8" +    @     B=A    A        ; length in bytes and divide by
  35.   "822" +    @     SB=0        ; two...
  36.   "81D" +    @     BSRB        ;   ...
  37.   "81D" +    @     BSRB        ;   ...
  38.   "137" +    @     CD1EX        ;   ...
  39.   "C9" +    @     C=C+B  A        ; Point to mid-point of string
  40.   "C9" +    @     C=C+B  A        ; and store in D0 and D1...
  41.   "135" +    @     D1=C        ;   ...
  42.   "136" +    @     CD0EX        ;   ...
  43.   "D7" +    @     D=C    A        ; Save D0 in D.
  44.   "83271" +    @     ?SB=0        ; String length even or odd?
  45.         @     GOYES  evn    ; +23 (17)
  46.   "511" +    @     GONC   odd    ; +17 (11) BET
  47.   "1C1" +    @ lp  D1=D1- 2        ; Next character (#2)
  48.   "14A" +    @     A=DAT0 B        ; Swap characters at D0 and D1...
  49.   "14F" +    @     C=DAT1 B        ;   ...
  50.   "149" +    @     DAT1=A B        ;   ...
  51.   "14C" +    @     DAT0=C B        ;   ...
  52.   "161" +    @ odd D0=D0+ 2        ; Next character (#1)
  53.   "CD" +    @ evn B=B-1  A        ; Count characters.
  54.   "5BE" +    @     GONC   lp        ; -21 (EB)
  55.   "DB" +    @     C=D    A        ; Restore D0 from D...
  56.   "134" +    @     D0=C        ;   ...
  57.   "119" +    @     C=R1        ; Restore D1 from R1...
  58.   "135" +    @     D1=C        ;   ...
  59.   "11A" +    @     C=R2        ; Restore B from R2...
  60.   "AF5" +    @     B=C    W        ;   ...
  61.   "142" +    @     A=DAT0 A        ; End
  62.   "164" +    @     D0=D0+ 5        ;   of
  63.   "808C" +    @     PC=(A)        ;    Routine
  64.   "93632" +    @ \>>            ; 23639
  65.   "B2130" +    @ End            ; 0312B
  66.   STR\->OBJ
  67.   'REV' STO
  68. \>>